var path = require('path');
var querystring = require("querystring");
var fs = require("fs");
var formidable = require("formidable");
var util = require('util');

function start(response, request) {
     console.log("Request handler 'start' was called."); 
     var body = '<html>'+ 
     '<head>'+ 
     '<meta http-equiv="Content-Type" content="text/html; '+ 
     'charset=UTF-8" />'+ 
     '</head>'+ 
     '<body>'+ 
     '<form action="/upload" enctype="multipart/form-data" '+ 
        'method="post">'+ 
        '<input type="file" name="upload">'+
        '<input type="submit" value="Upload file" />'+ 
     '</form>'+ 
     '</body>'+ 
     '</html>';
    response.writeHead(200, {"Content-Type": "text/html"}); 
    response.write(body); 
    response.end();
}

function upload(response, request) { 
    var form = new formidable.IncomingForm();
    console.log("about to parse");
    form.parse(request, function (error, fields, files) {
        console.log("parsing done");
        console.log(files.upload.path);
        fs.renameSync(files.upload.path, "./tmp/test.png");
        response.writeHead(200, {
            "Content-Type": "text/html"
        });
        response.write("received image:<br/>");
        response.write("<img src='/show' />");
        response.end();
    });

}

function show(response, request) { 
    console.log("Request handler 'show' was called."); 
    fs.readFile("./tmp/test.png", "binary", function(error, file) { 
        if(error) { 
            response.writeHead(500, {"Content-Type": "text/plain"}); 
            response.write(error + "\n"); 
            response.end();
        } else { 
            response.writeHead(200, {"Content-Type": "image/png"}); 
            response.write(file, "binary"); 
            response.end(); 
        } 
    }); 
}

//处理Get请求，返回user.html页面
function getUserUI(response, request) {
    console.log("Request handler 'getUserUI' was called.");

    filePath = path.join(__dirname, './views', 'uploadImages.html');
    //读取user.html文件，然后将其写入返回结果
    fs.readFile(filePath, function (err, data) {
        // 如果出现错误就抛出 err，没出错就把 html 页面返回给浏览器
        if (err) {
            throw err;
        } else {
            response.writeHead(200, {
                "Content-Type": "text/html"
            });
            response.write(data);
            response.end();
        }
    });
}

function ajaxUpload(response, request) { 
    var form = new formidable.IncomingForm();
    console.log("about to parse");
    form.parse(request, function (error, fields, files) {
        console.log("\n\nparsing done\n information as follows:\n");
        console.log(files);
        console.log(fields);
        console.log(fields.username);
        console.log(fields.age);

        fs.renameSync(files.img.path, "./tmp/test.png");
        response.writeHead(200, {
            "Content-Type": "text/html"
        });
        response.write("received image:<br/>");
        response.write("<img src='/show' />");
        response.end();
    });

}

exports.start = start; 
exports.upload = upload;
exports.show=show;
exports.getUserUI=getUserUI;
exports.ajaxUpload=ajaxUpload;